'''
给定两个整数 n 和 k，返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

 

示例 1：

输入：n = 4, k = 2
输出：
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/combinations
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
'''
class Solution(object):
    def combine(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: List[List[int]]
        """
        result=[]#用于存放条件结果的集和
        path=[]#用来存放符合条件结果
        def backtrace(n,k,startIndex):
            if len(path)==k:
                result.append(path[:])#copy.deepcopy(path)
                return 
            for i in range(startIndex,n+1):
                path.append(i)#处理节点
                backtrace(n,k,i+1)#递归：控制树的纵向遍历，注意下一层搜索要从i+1开始
                path.pop()#回溯，撤销处理的节点
        backtrace(n,k,1)
        return result

n = 4
k=2
Solution().combine(n,k)